Java final 与 C++ const
全部标签 示例intmain(){constinti=1.0;//NoticeIamassigningadoubletoanintherechara[i];}问题用g++-O0-Wall-pedantic-ansi-std=c++11编译上面的代码没有错误(除了未使用的变量)。但是,如果我删除-std=c++11,我会收到以下警告:warning:ISOC++forbidsvariablelengtharray根据thisSOquestion,我相信在C++03中,代码是无效的。但是,有人可以解释一下规则在C++11中发生了什么变化吗?(这个问题是我回答的apreviousquestion的结果
我相信从C++11开始,erase大多数容器的功能(例如std::vector)接受const_iterator作为参数:iteratorerase(const_iteratorposition);我的编译器(GCC4.8和Clang3.2,都使用GCClibstdc++)仍然不允许我使用这样的函数,即使在使用--std=c++11编译时也是如此。.是编译器/libstdc++错误,还是我做错了什么?这是示例代码:#includeintmain(){std::vectorv;v.push_back(1);v.push_back(2);v.push_back(3);std::vector
粗略地说,我有一个包含constunsignedchar数组的类。此类的对象由一个特殊的工厂函数创建,该函数还负责(在堆上)构造数组。当在工厂函数中创建一个对象时,它会被赋予指向数组的指针。数组不会被复制,对象只会使用给定的指针。在销毁时,它将释放数组占用的内存块。classFoo{private:constunsignedchar*array;size_tsize;public:Foo(constunsignedchar*array,size_tsize):array(array),size(size){}~Foo(){delete[]array;}};Foo*factoryFunc
将类的const正确性扩展到其指定成员的正确方法是什么?在示例代码中,get方法的常量版本是否会创建一个std::shared_ptr,其引用计数器与内部成员m_b相同,还是它重新从0开始计数?classA{std::shared_ptrm_b;public:std::shared_ptrget_b()const{returnm_b;}std::shared_ptrget_b(){returnm_b;}} 最佳答案 shared_ptr当您从另一个shared_ptr构造时,将始终保留引用计数;不安全使用它的唯一方法是从原始指针构造
我找到了thisanswer问题"Doesaconstreferenceprolongthelifeofatemporary?",其中指出:Onlylocalconstreferencesprolongthelifespan.恐怕我的标准语不达标,不知道下面的foo是否是本地常量引用。我下面的conststd::string&foo是否延长了在调用get_or时创建的临时std::string函数参数的生命周期>,或者我是否有悬空引用?#include#includestructFoo{conststd::string&get_or(conststd::string&def){retu
我在我的项目中使用的头文件具有以下定义:#ifdef__cplusplusextern"C"{#endif#ifdef__cplusplus#define__Ivolatile/*!__I在另一个头文件中使用如下:typedefstruct{//moremembersbefore__Iuint32_tCR;/*!我的问题是为什么__I在C中而不是在C++中成为常量?您仍然可以修改CR指向的值,因为您有地址,但我只是好奇为什么__I的定义不同。对于任何对它的用途或来源感兴趣的人,__I定义来自IAREmbeddedWorkbenchARMforCortex-M4,结构来自德州仪器LM4F
许多使用std::unique_ptr来管理类依赖项所有权的示例如下所示:classParent{public:Parent(Child&&child):_child(std::make_unique(std::move(child))){}private:std::unique_ptr_child;};我的问题是将_child成员标记为const是否会产生意想不到的副作用?(除了确保不能在_child上调用reset()、release()等)。我问是因为我还没有在示例中看到它,也不知道这是故意的还是只是为了简洁/一般性。 最佳答案
当我有两个这样的模板化函数重载时:templatevoidfoo(Tconst&){//dosomethingwithaconstreferencecoutvoidfoo(Tconst*){//dosomethingwithaconstpointercout为什么编译器在用非常量指针类型实例化时选择第一个版本?int*bar;foo(bar);//prints"constreferenceversion"charconst*baz;foo(baz);//prints"constpointerversion" 最佳答案 原因是因为ba
这样安全吗?constint&f(){return1;}我想做的是返回一个值给const& 最佳答案 这不行。返回对临时对象的引用是不行的,因为在函数外部访问它会导致未定义的行为。 关于c++-可以通过const引用返回文字吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6896334/
我有一个unordered_set>us我想知道是否有针k在us,但是k类型为shared_ptr所以unordered_set>::find提示它无法转换。有解决办法吗?也许通过直接提供哈希?我试过const_cast(感觉很脏)但这并没有解决问题。 最佳答案 使用std::const_pointer_cast在这里是一个可能的解决方案。us.find(std::const_pointer_cast(k));因为您没有修改k,所以可以丢弃const。 关于c++-在只有constsha